#include <iostream>
// #include <string>
// #include "Date.h"

// #include "Date.h"

// void Date::Print() const
// {
//     std::cout << "year:" << _year << " " << "month:" << _month << " " << "day:" << _day << std::endl;
// }

// int Date::GetMonthDay(int year, int month)
// {
//     static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//     if (month == 2 && (((year % 100 != 0) && (year % 4 == 0)) || year % 400 == 0)) // 判断闰年
//     {
//         return days[2] + 1; // 二月加一
//     }
//     return days[month];
// }

// // 操作符重载
// Date &Date::operator+=(int day)
// {
//     // 考虑负数的情况
//     if (day < 0)
//     {
//         return *this -= (-day);
//     }
//     _day += day;
//     while (_day > GetMonthDay(_year, _month))
//     {
//         _day -= GetMonthDay(_year, _month);
//         _month++;
//         if (_month == 13)
//         {
//             _month = 1;
//             _year++;
//         }
//     }

//     return *this;
// }

// Date Date::operator+(int day) const
// {
//     Date tmp = *this;
//     return tmp += day;
// }

// Date &Date::operator-=(int day)
// {
//     // 考虑负数的情况
//     if (day < 0)
//     {
//         return *this += (-day);
//     }
//     _day -= day;
//     while (_day <= 0)
//     {
//         _month--;
//         if (_month == 0)
//         {
//             _year--;
//             _month = 12;
//         }
//         _day += GetMonthDay(_year, _month);
//     }
//     return *this;
// }

// Date Date::operator-(int day) const
// {
//     Date tmp = *this;
//     return tmp -= day;
// }

// int Date::operator-(const Date &d) const
// {
//     // 找到它们之间小的那个，假设法
//     // 假设d 小于*this
//     Date small = d;
//     Date big = *this;
//     int flag = 1;
//     if (d > *this)
//     {
//         big = d;
//         small = *this;
//         flag = -1;
//     }

//     // 方法一：复用
//     int cnt = 0;
//     while (small != big)
//     {
//         small += 1;
//         cnt++;
//     }
//     return flag * cnt;
// }

// // // 操作符重载-比较
// bool Date::operator==(const Date &d) const
// {
//     if ((_year == d._year && _month == d._month) && _day == d._day)
//         return true;
//     return false;
// }
// bool Date::operator>(const Date &d) const
// {
//     if (_year > d._year)
//         return true;
//     if (_year == d._year)
//     {
//         if (_month > d._month)
//             return true;
//         if (_month == d._month)
//             return _day > d._day;
//     }
//     return false;
// }
// bool Date::operator<=(const Date &d) const
// {
//     return !(*this > d);
// }
// bool Date::operator<(const Date &d) const
// {
//     return !((*this > d) || (*this == d));
// }
// bool Date::operator>=(const Date &d) const
// {
//     return !(*this < d);
// }
// bool Date::operator!=(const Date &d) const
// {
//     return !(*this == d);
// }

// // 操作符重载-赋值
// // 略-系统生成

// // 前置++
// Date &Date::operator++()
// {
//     return *this += 1;
// }
// // 后置++
// Date Date::operator++(int)
// {
//     Date tmp = *this;
//     *this += 1;
//     return tmp;
// }

// // 操作符重载-流插入流提取
// // 流插入<<

// std::ostream &operator<<(std::ostream &out, const Date &d)
// {
//     out << d._year << "-" << d._month << "-" << d._day;
//     return out;
// }

// std::istream &operator>>(std::istream &in, Date &d)
// {
//     // 请输入年月日（以空格分隔）
//     in >> d._year >> d._month >> d._day;

//     while (!d.Check())
//     {
//         std::cout << "日期非法，请重试！" << std::endl;
//         in >> d._year >> d._month >> d._day;
//     }
//     return in;
// }

// namespace wxd
// {
//     int rand = 10;
// };

// int main()
// {

//     std::cout << wxd::rand<<std::endl;
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     double b = 0.1;
//     char c = 'w';
//     std::string d = "wxd";

//     std::cout << a <<" "<< b <<" "<< c<<" "<< d<<std::endl;
//     return 0;
// }

// //必须从左向右给实参，从右向左缺省
// void Fun(int a = 10,int b = 20,int c)//×
// {
//     std::cout<<a<<std::endl;
//     std::cout<<b<<std::endl;
//     std::cout<<c<<std::endl;
// }

// int main()
// {
//     //Fun();
//     Fun(20);
//     return 0;
// }

// void Print(int a)
// {
//     std::cout<<"I am A"<<std::endl;
// }

// void Print(int a, int b)//参数个数不同
// {
//     std::cout<<"I am B"<<std::endl;
// }

// void Print(int a, double b)//参数种类不同
// {
//     std::cout<<"I am C"<<std::endl;
// }
// void Print(double b,int a)//参数顺序不同
// {
//     std::cout<<"I am D"<<std::endl;
// }

// int main()
// {
//     Print(1);
//     Print(1,2);
//     Print(1,1.1);
//     Print(1.1,1);

//     return 0;
// }

// int main()
// {
//     int a = 6;
//     int &b = a;
//     int &c = a;

//     a++;
//     std::cout << a << std::endl;
//     std::cout << b << std::endl;
//     std::cout << c << std::endl;

//     std::cout<< &a<<std::endl;
//     std::cout<< &b<<std::endl;
//     std::cout<< &c<<std::endl;
//     return 0;
// }

// void swap(int& ra,int& rb)
// {
//     int c = ra;
//     ra = rb;
//     rb = c;
// }

// int main()
// {
//     int a = 1;
//     int b = 2;

//     std::cout << "a = " << a << " " << "b = " << b << std::endl;
//     //std::swap(a,b);

//     swap(a,b);
//     std::cout << "a = " << a << " " << "b = " << b << std::endl;

//     return 0;
// }

// int main()
// {
//     // int a = 10;
//     // const int& b = 20;

//     // const int a = 10;
//     // int& b = a;

//     return 0;
// }

// void fun(int n)
// {
//     std::cout<<"fun(int n)"<<std::endl;
// }

// void fun(int* n)
// {
//     std::cout<<"fun(int* n)"<<std::endl;
// }

// int main()
// {
//     fun(0);
//     fun(NULL);
//     return 0;
// }

// #define ADD(A,B) ((A)+(B))

// int main()
// {
//     int a =10;
//     int b = 20;
//     int c = ADD(a,b);
//     std::cout<<c<<std::endl;
// }

// int main()
// {
//     // const Date& d1 = 201;
//     // d1.Print();
//     // Date::Fun();

//     Date().Print();
//     return 0;
// }

// template<class T>
// void swap(T& a, T&b)
// {
//     T tmp = a;
//     a = b;
//     b = tmp;
// }

// int main()
// {
//     Date d1(2022,2,2);
//     Date d2(2025,5,5);
//     swap(d1,d2);
//     d1.Print();
//     d2.Print();
//     return 0;
// }

// int main()
// {
//     //管理对象
//     int *pa = new int;
//     int *pb = new int(10);
//     std::cout <<*pb<<std::endl;

//     //管理对象数组
//     int *parr = new int [10];//不初始化
//     int *parr1 = new int [10]{1,2,3,4,5};//初始化，未初始化部分为0
//     for(int i = 0;i < 10;i++)
//     {
//         std::cout<<parr1[i]<<" ";
//     }
//     std::cout<<std::endl;

//     return 0;
// }

// #include <vector>

// int main()
// {
//     std::vector<std::vector<int>> vv;

//     vv[0][0] = 0;
//     vv[0][1] = 1;
//     vv[1][0] = 3;
//     vv[1][1] = 4;
//     //error
//     for(size_t i = 0;i < vv.size();i++)
//     {
//         for(size_t j = 0;j < vv[i].size();j++)
//         {
//             std::cout<<vv[i][j]<<" ";
//         }
//     }
//     std::cout<<std::endl;
//     return 0;
// }

// template <size_t N>
// class Stack
// {
//     //...

// private:
//     double _arr[N];
//     size_t _size;
//     size_t _capacity;
// };

// template<double N>
// class A
// {

// };

// template <class T>
// bool Func(T x, T y)
// {
//     return x > y;
// }

// int main()  //问题？？
// {
//     std::cout << Func(2, 1) << std::endl;
//     Date d1(2025, 1, 1);
//     Date d2(2020, 1, 1);
//     Date d3(2020, 1, 1);
//     std::cout << Func(d1, d2) << std::endl;
//     Date *p1 = &d1;
//     Date *p2 = &d2;
//     Date *p3 = &d3;
//     std::cout << Func(p1, p2) << std::endl;
//     printf("%p\n",p1);
//     printf("%p\n",p2);
//     printf("%p\n",p3);

//     return 0;
// }

// template <class T>
// bool Func(const T& x,const  T& y)
// {
//     return x > y;
// }

// //特化
// template<>
// bool Func<Date*>( Date*const & x, Date*const& y)
// {
//     std::cout<<"bool Func<Date*>(Date* x, Date* y)"<<std::endl;
//     return *x > *y;
// }

// int main()
// {
//     std::cout << Func(2, 1) << std::endl;
//     Date d1(2025, 1, 1);
//     Date d2(2020, 1, 1);
//     Date d3(2020, 1, 1);
//     std::cout << Func(d1, d2) << std::endl;
//     Date *p1 = &d1;
//     Date *p2 = &d2;
//     Date *p3 = &d3;
//     std::cout << Func(p1, p2) << std::endl;
//     printf("%p\n",p1);
//     printf("%p\n",p2);
//     printf("%p\n",p3);

//     return 0;
// }

// // 模板
// template <class A, class B>
// class Stack
// {
// public:
//     Stack()
//     {
//         std::cout << "A B" << std::endl;
//     }

// private:
//     A _a;
//     B _b;
// };

// // 全特化
// template <>
// class Stack<int, double>
// {
// public:
//     Stack()
//     {
//         std::cout << "int double" << std::endl;
//     }

// private:
//     int _a;
//     double _b;
// };

// // 半特化
// template <class A>
// class Stack<A, double>
// {
// public:
//     Stack()
//     {
//         std::cout << "A char" << std::endl;
//     }

// private:
//     A _a;
//     double _b;
// };

// //特殊偏特化-指针
// template <class A, class B>
// class Stack<A*,B*>
// {
// public:
//     Stack()
//     {
//         std::cout << "A* B*" << std::endl;
//     }

// private:
//     A _a;
//     B _b;
// };

// int main()
// {
//     Stack<char*, double*> st;
//     return 0;
// }


